package cn.iocoder.yudao.module.shop.service.store;

import java.time.LocalDateTime;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.shop.controller.admin.store.vo.*;
import cn.iocoder.yudao.module.shop.dal.dataobject.store.StoreDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.shop.enums.store.StoreBizTypeEnum;

/**
 * 库存 Service 接口
 *
 * @author 曹建伟
 */
public interface StoreService {

    /**
     * 创建库存
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createStore(@Valid StoreCreateReqVO createReqVO);

    /**
     * 更新库存
     *
     * @param updateReqVO 更新信息
     */
    void updateStore(@Valid StoreUpdateReqVO updateReqVO);

    /**
     * 删除库存
     *
     * @param id 编号
     */
    void deleteStore(Long id);

    /**
     * 获得库存
     *
     * @param id 编号
     * @return 库存
     */
    StoreDO getStore(Long id);

    /**
     * 通过条码获得库存
     *
     * @param code 条码id
     * @return 库存
     */
    StoreDO getStoreByCode(String code, Long tenantId);

    /**
     * 获得库存列表
     *
     * @param ids 编号
     * @return 库存列表
     */
    List<StoreDO> getStoreList(Collection<Long> ids);

    /**
     * 获得库存分页
     *
     * @param pageReqVO 分页查询
     * @return 库存分页
     */
    PageResult<StoreDO> getStorePage(StorePageReqVO pageReqVO);

    /**
     * 获得库存列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 库存列表
     */
    List<StoreDO> getStoreList(StoreExportReqVO exportReqVO);

    List<StoreDO> getAllList();

    void outStore(StoreNumReqVO storeNumReqVO);

    void inStore(StoreNumReqVO storeNumReqVO);

    void outStore(StoreOutReqVO reqVO);

    void consume(Long id, Integer num, Integer typeId, Long tenantId, LocalDateTime time, String purpose);
}
